﻿//***********************************************************************************
// 文件名称：HandlerUseItem
// 功能描述：使用物品接口
// 数据表：
// 作者：liuxiaohu
// 日期：2017/3/13 9:16:20
// 修改记录：
//***********************************************************************************

using System;
using System.Web;

namespace GameServerService
{
    using GameServer;

    /// <summary>
    /// HandlerUseItem 的摘要说明
    /// </summary>
    public class HandlerUseItem : IHttpHandler
    {
        /// <summary>
        /// 接收http请求处理并返回
        /// </summary>
        /// <param name="context"></param>
        public void ProcessRequest(HttpContext context)
        {
            String resultMessage = String.Empty;

            try
            {
                // 解析参数
                Int32 playerId = Convert.ToInt32(context.Request["playerId"]);
                Int32 itemId = Convert.ToInt32(context.Request["itemId"]);
                Int32 itemNum = Convert.ToInt32(context.Request["itemNum"]);

                // 处理数据
                if (itemNum > 0 && UseItem(playerId, itemId, itemNum))
                {
                    resultMessage = "true";
                }
            }
            catch (Exception e)
            {
                // 日志记录错误信息
                LOG.Write("ERROR:" + e.Message);

                resultMessage = e.Message;
            }
            finally
            {
                // 返回需要的数据
                context.Response.Write(resultMessage);
            }
        }

        /// <summary>
        /// 获取一个值，该值指示其他请求是否可以使用 IHttpHandler 实例
        /// </summary>
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }

        /// <summary>
        /// 使用物品
        /// </summary>
        /// <param name="playerId">玩家Id</param>
        /// <param name="itemId">道具Id</param>
        /// <param name="itemNum">道具数量</param>
        /// <returns>使用结果</returns>
        private bool UseItem(Int32 playerId, Int32 itemId, Int32 itemNum)
        {
            Player pl = GameServer.Global.PlayerMgr.GetPlayerFromId(playerId);
            if (pl == null)
            {
#if DEBUG
                pl = new Player(playerId, "测试" + playerId.ToString(), 0);
#else
                return false;
#endif
            }

            if (pl.UseItem(itemId, itemNum))
            {
                return DealData(playerId, pl);
            }

            return false;
        }

        /// <summary>
        /// 处理数据
        /// </summary>
        /// <param name="playerId">玩家Id</param>
        /// <param name="pl">玩家对象</param>
        /// <returns>处理结果</returns>
        private bool DealData(Int32 playerId, Player pl)
        {
            // 添加玩家到全局变量中
            GameServer.Global.PlayerMgr.Add(playerId, pl);

            // 判断是否将玩家添加到排行榜中
            if (pl.PlayerScores >= GameServer.Const.ActScore)
            {
                GameServer.Global.RankMgr.Add(playerId, new Rank(pl.PlayerName, pl.PlayerScores, 0));
            }

            return true;
        }
    }
}